<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

include_once 'main.php';

class Login extends Main {

    public function __construct() {
        parent::__construct();
        $this->load->library('recaptcha');
        
        $this->template->load_css(array('login'));
        $this->template->set('title', 'Autenticação | Sisbion - Sistema Bibliotecário Online');
    }

    /**
     * Carrega a view para login
     */
    public function index() {
        $this->template->load('layouts/login','login', NULL, FALSE, TRUE);
    }

    /**
     * Realiza a autenticação do usuário.
     */
    public function autenticacao() {
        try {
            $this->load->library('form_validation');
            $this->form_validation->set_rules("login", "Login", "trim|required|valid_email");
            $this->form_validation->set_rules("password", "Password", "trim|htmlentities|max_length[8]|min_length[4]|required");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors("<span>", "</span>"));
            } else {
                $this->load->model('ControleAcesso');

                // Desloga, caso esteja logado
                if ($this->ControleAcesso->checkLogged()) {
                    $this->ControleAcesso->logoutUser();
                }
                $this->ControleAcesso->autenticaUsuario();
                redirect('main');
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }
    
    /*
     * Desloga o usuário da aplicação
     */
    public function logout() {
        try {
            $this->session->sess_destroy();
            $this->index();
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }

    /**
     * Recuperar senha de usuário
     */
    public function recupera_senha() {
        //Store the captcha HTML for correct MVC pattern use.
        $data['recaptcha_html'] = $this->recaptcha->recaptcha_get_html();
        
        $this->template->set('title', 'Recuperação de senha | Sisbion - Sistema Bibliotecário Online');
        $this->template->load('layouts/login','recupera_senha', $data, FALSE, TRUE);
    }
    
    
    /**
     * Recuperar senha do usuário
     * - Envia um e-mail com uma senha aleatória
     * 
     * @throws ExceptionValidacao
     */
    public function recuperar_senha() {
        try {
            $this->load->library('form_validation');
            $this->form_validation->set_rules("email", "Login", "trim|required|valid_email");
            //Call to recaptcha to get the data validation set within the class. 
            $this->recaptcha->recaptcha_check_answer($_SERVER['REMOTE_ADDR'], $this->input->post('recaptcha_challenge_field'), $this->input->post('recaptcha_response_field'));


            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors("<span>", "</span>"));
            } elseif (!$this->recaptcha->is_valid) {
                throw new ExceptionValidacao('Recaptcha incorreto!');
            } else {
                $this->load->model('DAOUsuario');
                $usuario = $this->DAOUsuario->get_user(NULL, $this->input->post('email'));

                // Se encontrar o usuário
                if (count($usuario) > 0) {
                    $this->load->model('DAOConfig');
                    $config = $this->DAOConfig->get_config();

                    if ($config->modulo_email_status) {
                        // Envia o e-mail contendo uma nova senha
                        $this->load->model('DAOEmail');
                        $email = new TOEmail();
                        $email->destinatario = array($usuario->email);
                        $email->assunto = 'Recuperação de senha!';

                        $logomarca = Main::get_logomarca();
                        $usuario->senha = generate_password();
                        $email->mensagem = "<span style='float: right; padding-left: 25px; margin-top: 10px;'><img width='150' src='{$logomarca}'/></span>
                                            <p style='margin-top: 20px; margin-bottom: 20px;'>
                                                Olá, <span style='font-size: 15px; color: #666666; font-weight: bold;'>{$usuario->get_nome_completo()}</span>
                                            </p>
                                            <p>
                                            Recebemos o seu pedido de recuperação de senha.<br />
                                            Sua nova senha é: <span style='font-size: 15px; color: #666666; font-weight: bold;'>{$usuario->senha}</span>
                                            </p>
                                            <p>
                                                <b>Obs.</b> <i>É altamente recomendado que ao fazer o login no sistema, você troque para uma senha que venha lembrar posteriormente...</i>
                                            </p>
                                            <p>Obrigado,</p>
                                            <p style='margin-top: 20px; font-style: italic;'>
                                                {$config->nome_instituicao}<br />
                                                {$config->endereco}<br />
                                                Contato: {$config->telefone} | $config->email
                                            </p>
                                            <p style='float: right; font-style: italic; margin-top: 30px; font-size: 11px;'>Conteúdo gerado automaticamente, por favor não responder. <br />" . format_date(date("Y-m-d h:i:s")) . "</p>";

                        // Salva a nova senha no banco                        
                        $this->DAOUsuario->update_password($usuario);

                        //Envia e-mail par ausuário da vez
//                        $this->DAOEmail->send_email($email);
                    } else {
                        throw new ExceptionValidacao('<p class="bold">Não é possível executar essa funcionalidade!</p><p>O módulo de e-mail está desabilitado no sistema. Entre em contato com administrador...</p>');
                    }
                    Mensagem::setMensagem('Uma nova senha foi enviada para o seu e-mail...', 'Operação realizada com sucesso!', 'sucesso');
                    $this->index();
                } else {
                    $this->recupera_senha();
                }
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->recupera_senha();
        }
    }

}
